import { mergeOptions } from "../utils/index";

// 注册extend方法
let cid = 0; // 组件的唯一标识
export function initExtend(Vue) {
	Vue.extend = function (extendOptions) {
		// 创建子类,并且初始化自生的options
		const Sub = function VueComponent(options) {
			this._init(options);
		};
		// 让子类的原型指向当前Vue实例的原型
		Sub.prototype = Object.create(this.prototype);
		Sub.prototype.constructor = Sub;
		// 每次调用cid就加一,标记不同的组件
		Sub.cid = cid++;
		// 合并父子类的配置
		Sub.options = mergeOptions(this.options, extendOptions);
		// 返回子类
		return Sub;
	};
}
